// #include "bsp_include.h"


// /*
// 	从 ETH1-5 接收数据，填充到 MB对象中，发送接收完成标志 使用MB对象 不同的协议处理和不同的发送函数。
// */

// osThreadId_t ThreadIdTask_MB_tcp_ETH1_handle = NULL; 
// osThreadId_t ThreadIdTask_MB_RTU1_handle = NULL;


// const osThreadAttr_t Thread_MB_tcp_ETH1_Attr = 
// {
// 	.name = "osRtx_Eth1_polling_Thread",
// 	.attr_bits = osThreadDetached, 
// 	.priority = osPriorityHigh,
// 	.stack_size = 512,
// };

// const osThreadAttr_t Thread_MB_RTU1_Attr = 
// {
// 	.name = "osRtx_RTU1_polling_Thread",
// 	.attr_bits = osThreadDetached, 
// 	.priority = osPriorityHigh,
// 	.stack_size = 512,
// };







// // 事件标志组
// osEventFlagsId_t evtId_MBtcp_handle;

// //事件标志组属性
// const osEventFlagsAttr_t evt_MBtcp_handle_Attr = 
// {
// 	.name = "MB_tcp_handle",
// 	.attr_bits = 0, 
// 	.cb_mem = NULL,
// 	.cb_size = 0,
// };



// /* MB对象 */
// MUTI_MB_object_t ETH1_MB_Object;
// MUTI_MB_object_t RTU1_MB_Object;


// /***************************
// 	MB对象添加 接收的报文，
// 	TCP 接收完一包，通过该函数将数据填入对象缓冲区
// 	RTU 在定时器中断中将该数据填入缓冲区
// ***************************/
// void ETH1_MB_data_append(uint8_t* data, uint16_t len)
// {
// 	if(MUTI_MB_data_append(&ETH1_MB_Object, data, len))
// 	{
// 		// 发送 ETH1的接收事件
// 		osEventFlagsSet(evtId_MBtcp_handle, MB_TCP_ETH1_RECVED);
// 	}
// }


// void RTU1_MB_data_append(const uint8_t* data, uint16_t len)
// {
// 	if(MUTI_MB_data_append(&RTU1_MB_Object, data, len))
// 	{
// 		// 发送RTU1的接收事件
// 		osEventFlagsSet(evtId_MBtcp_handle, MB_TCP_RTU1_RECVED);		
// 	}		
// }

// /*****************************
// 	协议处理 回调函数 
// ***************************/



// /*********************
// ETH1 mb协议处理 
// *******************/
// #define ETH1_REG_HOLDING_START	0
// #define ETH1_REG_HOLDING_NREGS	8
// uint16_t ETH1_RegHoldingBuf[ETH1_REG_HOLDING_NREGS] = {0x1000,0x1001,0x1002,0x1003,0x1004,0x1005,0x1006,0x1007};


// eMUTI_MB_ErrorCode ETH1_MB_handle(uint8_t function_code, uint8_t * pucRegBuffer,\
//                             uint16_t Address, uint16_t Reg_num, eMUTI_MB_RegisterMode wr_Mode)
// {
// 	 eMUTI_MB_ErrorCode    eStatus = MUTI_MB_ENOERR;
// 	 int             iRegIndex = 0;

// 	//printf("ETH1 function_code[%d] Address %X Reg_num %d \r\n", function_code, Address, Reg_num);	
	
// 	switch(function_code)
// 	{
// 		case MUTI_MB_FUNC_READ_HOLDING_REGISTER:
			
// 			// 判断地址范围 不满足范围 返回错误
// 		if((Address >= ETH1_REG_HOLDING_START)&&\
// 			((Address+Reg_num) <= (ETH1_REG_HOLDING_START + ETH1_REG_HOLDING_NREGS)))
// 		{
// 			iRegIndex = Address - 0;
		
// 			while(Reg_num > 0)
// 			{
// 				*pucRegBuffer++ = ( UCHAR )( ETH1_RegHoldingBuf[iRegIndex] >> 8 );
// 				*pucRegBuffer++ = ( UCHAR )( ETH1_RegHoldingBuf[iRegIndex] & 0xFF );
				
// 				//printf("read ETH1_RegHoldingBuf[%d] %x \r\n", iRegIndex, ETH1_RegHoldingBuf[iRegIndex]);

				
// 				iRegIndex++;
// 				Reg_num--;
// 			}
// 		}
// 		else
// 		{
// 			eStatus = MUTI_MB_ENOREG;
// 		}
// 		break;
			
// 		case MUTI_MB_FUNC_WRITE_REGISTER:
// 		case MUTI_MB_FUNC_WRITE_MULTIPLE_REGISTERS:
			
// 		if((Address >= ETH1_REG_HOLDING_START)&&\
// 			((Address+Reg_num) <= (ETH1_REG_HOLDING_START + ETH1_REG_HOLDING_NREGS)))
// 		{
// 			iRegIndex = Address - 0;
		
// 			while(Reg_num > 0)
// 			{				 	
// 				ETH1_RegHoldingBuf[iRegIndex]  = *pucRegBuffer++ << 8;				
// 				ETH1_RegHoldingBuf[iRegIndex] |= *pucRegBuffer++; 
				
// 				printf("write ETH1_RegHoldingBuf[%d] %x \r\n",iRegIndex, ETH1_RegHoldingBuf[iRegIndex]);

				
				
// 				iRegIndex++;
// 				Reg_num--;
// 			}
// 		}
// 		else
// 		{
// 			eStatus = MUTI_MB_ENOREG;
// 		}
		
// 		break;
			
// 		case MUTI_MB_FUNC_READWRITE_MULTIPLE_REGISTERS://读写多个

// 		{
// 			switch(wr_Mode)
// 			{
// 				case MB_REG_READ:
// 				{
// 					if((Address >= ETH1_REG_HOLDING_START)&&\
// 						((Address+Reg_num) <= (ETH1_REG_HOLDING_START + ETH1_REG_HOLDING_NREGS)))
// 					{
// 						iRegIndex = Address - 0;
					
// 						while(Reg_num > 0)
// 						{
// 							*pucRegBuffer++ = ( UCHAR )( ETH1_RegHoldingBuf[iRegIndex] >> 8 );
// 							*pucRegBuffer++ = ( UCHAR )( ETH1_RegHoldingBuf[iRegIndex] & 0xFF );
							
// 							printf("read ETH1_RegHoldingBuf[%d] %x \r\n", iRegIndex, ETH1_RegHoldingBuf[iRegIndex]);
						
// 							iRegIndex++;
// 							Reg_num--;
// 						}
// 					}
// 					else
// 					{
// 						eStatus = MUTI_MB_ENOREG;
// 					}		
// 				}			
// 				break;
				
// 				case MB_REG_WRITE:
// 				{
// 					if((Address >= ETH1_REG_HOLDING_START)&&\
// 						((Address+Reg_num) <= (ETH1_REG_HOLDING_START + ETH1_REG_HOLDING_NREGS)))
// 					{
// 						iRegIndex = Address - 0;
					
// 						while(Reg_num > 0)
// 						{				 	
// 							ETH1_RegHoldingBuf[iRegIndex]  = *pucRegBuffer++ << 8;				
// 							ETH1_RegHoldingBuf[iRegIndex] |= *pucRegBuffer++; 
							
// 							printf("write ETH1_RegHoldingBuf[%d] %x \r\n",iRegIndex, ETH1_RegHoldingBuf[iRegIndex]);
						
// 							iRegIndex++;
// 							Reg_num--;
// 						}
// 					}
// 					else
// 					{
// 						eStatus = MUTI_MB_ENOREG;
// 					}		
// 				}
// 				break;			
// 			}		
// 		}

// 		break;			
// 	}
// 	return eStatus;
// }




// /***************************
// 	MB 发送回调函数
// ***************************/
// void ETH1_send(uint8_t* fram_ptr, uint16_t len)
// {             
//     ETH_Ux_send(ETH_1, 4, fram_ptr, len);
// }


// void RTU1_send(uint8_t* fram_ptr, uint16_t len)
// {             
// 	comSendBuf(COM9, fram_ptr, len);
	
// }

// /***************************
// 	MB 解析任务
// ***************************/
// void AppTask_MB_tcp_ETH1_handle(void *argument)
// {	
// 	uint32 flags;
//     while(1)
//     {				
// 		// 等待接收事件
// 		flags = osEventFlagsWait(	evtId_MBtcp_handle,        // 事件标志组句柄
// 									MB_TCP_ETH1_RECVED,       // 等待的标志位
// 									osFlagsWaitAny,        // 任意标志匹配即可
// 									osWaitForever          // 永久等待（无数据时阻塞）
// 								);
				
// 		MUTI_MB_poll(&ETH1_MB_Object);
// 		osThreadYield();
		
//     }
// }


// void AppTask_MB_RTU1_handle(void *argument)
// {	
// 	uint32 flags;
//     while(1)
//     {				
// 		// 等待接收事件
// 		flags = osEventFlagsWait(	evtId_MBtcp_handle,        // 事件标志组句柄
// 									MB_TCP_RTU1_RECVED,       // 等待的标志位
// 									osFlagsWaitAny,        // 任意标志匹配即可
// 									osWaitForever          // 永久等待（无数据时阻塞）
// 								);	
		
// 		MUTI_MB_poll(&RTU1_MB_Object);
		
// 		osEventFlagsClear(evtId_MBtcp_handle, MB_TCP_RTU1_RECVED);		
//     }
// }

// /* MB 初始化 main中调用 */
// void Task_creat_MB_tcp()
// {
// 	/*创建 事件标志组 */
// 	evtId_MBtcp_handle = osEventFlagsNew(&evt_MBtcp_handle_Attr);
// 	if (evtId_MBtcp_handle == NULL) { sys_error; }
	
// 	// 使能RTU的定时器
// 	RTU1_Timer7_init();
	
// 	/* MB对象初始化*/
// 	MUTI_MB_object_init(&RTU1_MB_Object, MUTI_MB_RTU_1, &RTU_1_MB_handle, &RTU1_send);
// 	MUTI_MB_object_init(&ETH1_MB_Object, MUTI_MB_TCP, &ETH1_MB_handle, &ETH1_send);
	
	
// 	/*创建解析任务*/
// 	ThreadIdTask_MB_tcp_ETH1_handle = osThreadNew(AppTask_MB_tcp_ETH1_handle, NULL, &Thread_MB_tcp_ETH1_Attr);
// 	if(ThreadIdTask_MB_tcp_ETH1_handle == NULL){sys_error;}
	
// 	ThreadIdTask_MB_RTU1_handle = osThreadNew(AppTask_MB_RTU1_handle, NULL, &Thread_MB_RTU1_Attr);
// 	if(ThreadIdTask_MB_tcp_ETH6_handle == NULL){sys_error;}
	
	
// }







